home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
16BIT.SRC
< prev
next >
Wrap
Text File
|
2019-04-13
|
5KB
|
307 lines
;* 25AUG85 @ 6:42PM
;* 65XX 16 BIT MACROS *
;**************************************
;* COPR 1985 BY IRWIN R. SHAPIRO *
;* PRESIDENT OF I.R.S. LABS *
;**************************************
.OPT GEN
;**************************************
R0 = $2
R1 = R0+2
R2 = R1+2
R3 = R2+2
R4 = R3+2
R5 = R4+2
R6 = R5+2
R7 = R6+2
R8 = R7+2
R9 = R8+2
RA = R9+2
RB = RA+2
RC = RB+2
RD = RC+2
RE = RD+2
RF = RE+2
;**************************************
.MAC TR
;RX,RY ;RX <- RY [16B]
PHA ; WHO KNOWS WHATS IN IT
LDA ?2 ; MOVE THE HI & LO BYTE
STA ?1
LDA ?2+1
STA ?1+1
PLA
.MND
.MAC ST
;RX,MEM ;RX -> MEMORY [16B]
PHA
LDA ?1
STA ?2
LDA ?1+1
STA ?2+1
PLA
.MND
.MAC LD
;RX,MEM ;RX <- MEMORY [16B]
PHA
LDA ?2
STA ?1
LDA ?2+1
STA ?1+1
PLA
.MND
.MAC STAT
;RX,(RY) ;RX -> (RY) [16B]
PHA
TYA
PHA
LDY #0
LDA ?1
STA ?2,Y
LDA ?1+1
INY
STA ?2,Y
PLA
TAY
PLA
.MND
.MAC LDAT
;RX,RY ;RX <- (RY) [16B]
PHA
TYA
PHA
LDY #0
LDA ?2,Y
STA ?1
INY
LDA ?2,Y
STA ?1+1
PLA
TAY
PLA
.MND
.MAC LDIM
;RX,WORD ;RX <- IMM.WORD [16B]
PHA
LDA ?3+1
STA ?1
LDA ?3+2
STA ?1+1
PHP
CLC
BCC ?4
?3 LDA ?2,Y ; IT'S NEVER EXECUTED
?4 PLP ; BUT IT'S AN EASY WAY
PLA ; TO FAKE A WORD
.MND
.MAC LDLO
;RX,MEM ;RX <- MEMORY [8B]
PHA
LDA ?2
STA ?1
PLA
.MND
.MAC STLO
;RX,MEM ;RX -> MEMORY [8B]
PHA
LDA ?1
STA ?2
PLA
.MND
.MAC PUSH
;RX,RY ;RX -> STACK OF RY [16B]
PHA
TYA
PHA
SEC
LDA ?2
SBC #$2
STA ?2
LDA ?2+1
SBC #0
STA ?2
LDA ?1+1
LDY #0
STA (?2),Y
DEY
LDA ?1
STA (?2),Y
PLA
TAY
PLA
.MND
.MAC PULL
;RX,RY ;RX <- STACK OF RY [16B]
PHA
TYA
PHA
LDY #1
LDA (?2),Y
STA ?1
DEY
LDA (?2),Y
STA ?1+1
CLC
LDA ?2
ADC #2
STA ?2
LDA ?2+1
ADC #0
STA ?2
PLA
TAY
PLA
.MND
.MAC MUL
;RX,RY ;RX TIMES RY
; RY=LO WORD AND RY+1=HI WORD OF RESULT
; [16B IN & 32B OUT]
PHA
TXA
PHA
LDA #0
STA ?2+2 ; ZERO OUT HI-WORD
STA ?2+3
LDX #17 ; 16 BIT WORDS
CLC
?3 ROR ?2+3 ; SHIFT IT
ROR ?2+2
ROR ?2+1
ROR ?2
BCC ?4
CLC
LDA ?1 ; AND ADD IT
ADC ?2+2
STA ?2+2
LDA ?1+1
ADC ?2+3
STA ?2+3
?4 DEX
BNE ?3
PLA
TAX
PLA
.MND
.MAC DIV
;RX,RY ;RX / RY
; RESULT RX = QUOTIENT,RX+1=REMAINDER
PHA
TXA
PHA
TYA
PHA
LDA #0
STA ?1+2 ; ZERO HI BYTE OF DVEND
STA ?1+3
LDA ?2 ; CHECK FOR DIV BY ZERO
ORA ?2+1
BNE ?3 ; DO THE DIVISION
STA ?1+1 ; ZERO IT OUT AND EXIT
STA ?1
BEQ ?4
?3 LDX #16
?5 ROL ?1
ROL ?1+1
ROL ?1+2
ROL ?1+3
SEC
LDA ?1+2
SBC ?2
TAY
LDA ?1+3
SBC ?2+1
BCC ?6
STY ?1+2
STA ?1+3
?6 DEX
BNE ?5
ROL ?1
ROL ?1+1
?4 PLA
TAY
PLA
TAX
PLA
.MND
.MAC SUB
;RX,RY ;RY <- RX-RY
; [16B]
; WORKS SIGNED OR UNSIGNED
PHA
LDA ?1
SEC
SBC ?2
STA ?2
LDA ?1+1
SBC ?2+1
STA ?2+1
PLA
.MND
.MAC ADD
;RX,RY ;RY <- RX+RY
; [16B]
; WORKS SIGNED OR UNSIGNED
PHA
LDA ?1
CLC
ADC ?2
STA ?2
LDA ?1+1
ADC ?2+1
STA ?2+1
PLA
.MND
.MAC INC16
;RX ;RX <- RX+1
; [16B]
INC ?1
BNE ?2
INC ?1+1
?2 .MND
.MAC DEC16
;RX ;RX <- RX+1
; [16B]
INC ?1 ; IT'S A LITTLE WEIRD
DEC ?1 ; BUT IT WORK'S
BNE ?2
DEC ?1+1
?2 DEC ?1
.MND
.MAC PUSHUS
;RX ;PUSH RX ONTO RF STK
PUSH ?1,RF ;[16B]
.MND
.MAC PUSHRS
; PUSH RX ONTO RE STK
PUSH ?1,RE ;[16B]
.MND
.MAC PULLUS
;RX ;PULL RX FROM RF STK
PULL ?1,RF ;[16B]
.MND
.MAC PULLRS
;RX ;PULL RX FROM RE STK
PULL ?1,RE ;[16B]
.MND
; *=2000
; TR R1,R2
; ST R1,$0600
; LD R2,%10110111
; STAT R5,(R9)
; LDAT R6,(R2)
; LDIM R4,$FF
; LDLO R4,65535
; STLO R7,$45
; PUSH R3,R4
; PULL R2,RE
; MUL R4,R5
; DIV R4,R5
; SUB R4,R5
; ADD R4,R5
; INC16 R8
; DEC16 RA
; PUSHUS R0
; PUSHRS R1
; PULLUS R2
; PULLRS R3
.END